home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 25 / AACD 25.iso / AACD / Graphics / PerfectPaint / rexx / box / Puzzle.rx < prev    next >
Encoding:
Text File  |  2000-09-10  |  6.7 KB  |  402 lines

  1. /* Box arexx test */
  2.  
  3.     options results
  4.   parse ARG Port x1 y1 x2 y2 b
  5.     ADDRESS value Port
  6.  
  7.     SizeW=x2-x1+1
  8.   SizeH=y2-y1+1
  9.  
  10.   Nbx=5
  11.   Nby=5
  12.     Shade=50
  13.     Dec=1
  14.     Type=0
  15.  
  16.     IF EXISTS('PerfectPaint:Prefs/Rexx_Prefs/Puzzle') THEN DO
  17.         IF OPEN('lfile','PerfectPaint:Prefs/Rexx_Prefs/Puzzle', "R") then DO
  18.             Nbx= READLN('lfile')
  19.             Nby= READLN('lfile')
  20.             Shade= READLN('lfile')
  21.             Type= READLN('lfile')
  22.             CALL CLOSE('lfile')
  23.         END
  24.     END
  25.  
  26.     pp_DialogInit 230 125 "*PUZZLE*" 4
  27.         pp_Integer 0 110 5 50 16 "Nb*of*pieces*H" 1 Nbx
  28.         pp_Integer 1 110 25 50 16 "Nb*of*Pieces*V" 1 Nby
  29.         pp_Integer 2 110 45 50 16 "Power" 1 Shade
  30.         pp_Cycle   3 110 75 80 16 "Type" 1 "Classic|Simple" Type
  31.     pp_Dialog
  32.     rc=result
  33.     IF rc=0 then DO
  34.         EXIT
  35.     END
  36.  
  37.     pp_PenType 0
  38.     pp_AliasOn
  39.  
  40.     pp_GetDialog 0
  41.     Nbx=result
  42.     IF Nbx<2 then DO
  43.         Nbx=2
  44.     END
  45.  
  46.     pp_GetDialog 1
  47.     Nby=result
  48.     IF Nby<2 then DO
  49.         Nby=2
  50.     END
  51.  
  52.     pp_GetDialog 2
  53.     Shade=result
  54.  
  55.     pp_GetDialog 3
  56.     Type=result
  57.  
  58.     CALL SavePrefs('Puzzle',Nbx,Nby,Shade,Type)
  59.     ADDRESS value Port
  60.  
  61.     pp_UpdateUndoBox x1-2 y1-2 x2+2 y2+2
  62.  
  63.   Stepx=trunc(SizeW/Nbx+0.5)
  64.   Stepy=trunc(SizeH/Nby+0.5)
  65.  
  66.     pp_EffectOn
  67.     pp_Shade Shade
  68.     pp_Box x1 y1 x2 y2
  69.     pp_Light Shade
  70.     pp_Box x1+Dec y1+Dec x2+Dec y2+Dec
  71.  
  72.  
  73. IF Type=1 then DO
  74.     DO j=y1+Stepy-1 to y1+(Stepy*(Nby-1)) by Stepy
  75.       DO i=x1 to x1+(Stepx*(Nbx-1)) by Stepx
  76.             n.i=TRUNC(RANDU(time('S'))+0.5)
  77.         END
  78.         DO k=1 to 2
  79.             IF k=1 THEN DO
  80.                 pp_Shade Shade
  81.             END
  82.             ELSE DO
  83.                 pp_Light Shade    
  84.             END
  85.             pp_StartPoly
  86.           DO i=x1 to x1+(Stepx*(Nbx-1)) by Stepx
  87.                 IF i=x1 then DO
  88.                     CALL MultiPoly(4,i,j)
  89.                 END
  90.                 IF k=1 then DO
  91.                     CALL LineH1(i,j,Stepx,Stepy,n.i,x2)
  92.                 END
  93.                 ELSE DO
  94.                     CALL LineH1(i+Dec,j+Dec,Stepx,Stepy,n.i,x2)
  95.                 END
  96.             END
  97.             IF i+stepx<x2 THEN DO
  98.                 CALL MultiPoly(3,i+stepx,j)
  99.             END
  100.             ELSE DO
  101.                 CALL MultiPoly(3,x2,j)            
  102.             END
  103.             pp_EndPolyS
  104.         END
  105.     END
  106.  
  107.     DO i=x1+Stepx-1 to x1+(Stepx*(Nbx-1)) by Stepx
  108.       DO j=y1 to y1+(Stepy*(Nby-1)) by Stepy
  109.             n.j=TRUNC(RANDU(time('S'))+0.5)
  110.         END
  111.         DO k=1 to 2
  112.             IF k=1 THEN DO
  113.                 pp_Shade Shade
  114.             END
  115.             ELSE DO
  116.                 pp_Light Shade    
  117.             END
  118.             pp_StartPoly
  119.           DO j=y1 to y1+(Stepy*(Nby-1)) by Stepy
  120.                 IF j=y1 then DO
  121.                     CALL MultiPoly(4,i,j)
  122.                 END
  123.                 IF k=1 then DO
  124.                     CALL LineV1(i,j,Stepx,Stepy,n.j,y2)
  125.                 END
  126.                 ELSE DO
  127.                     CALL LineV1(i+Dec,j+Dec,Stepx,Stepy,n.j,y2)
  128.                 END
  129.             END
  130.             IF j+Stepy<y2 then DO
  131.                 CALL MultiPoly(3,i,j+stepy)
  132.             END
  133.             ELSE DO
  134.                 CALL MultiPoly(3,i,y2)
  135.             END
  136.             pp_EndPolyS
  137.         END
  138.     END
  139.  
  140. END
  141.  
  142.  
  143. IF Type=0 then DO
  144.     DO j=y1+Stepy-1 to y1+(Stepy*(Nby-1)) by Stepy
  145.       DO i=x1 to x1+(Stepx*(Nbx-1)) by Stepx
  146.             n.i=TRUNC(RANDU(time('S'))+0.5)
  147.         END
  148.         DO k=1 to 2
  149.             IF k=1 THEN DO
  150.                 pp_Shade Shade
  151.             END
  152.             ELSE DO
  153.                 pp_Light Shade    
  154.             END
  155.             pp_StartPoly
  156.           DO i=x1 to x1+(Stepx*(Nbx-1)) by Stepx
  157.                 IF i=x1 then DO
  158.                     CALL MultiPoly(4,i,j)
  159.                 END
  160.                 IF k=1 then DO
  161.                     CALL LineH(i,j,Stepx,Stepy,n.i,x2)
  162.                 END
  163.                 ELSE DO
  164.                     CALL LineH(i+Dec,j+Dec,Stepx,Stepy,n.i,x2)
  165.                 END
  166.             END
  167.             IF i+stepx<x2 THEN DO
  168.                 CALL MultiPoly(3,i+stepx,j)
  169.             END
  170.             ELSE DO
  171.                 CALL MultiPoly(3,x2,j)            
  172.             END
  173.             pp_EndPolyS
  174.         END
  175.     END
  176.  
  177.     DO i=x1+Stepx-1 to x1+(Stepx*(Nbx-1)) by Stepx
  178.       DO j=y1 to y1+(Stepy*(Nby-1)) by Stepy
  179.             n.j=TRUNC(RANDU(time('S'))+0.5)
  180.         END
  181.         DO k=1 to 2
  182.             IF k=1 THEN DO
  183.                 pp_Shade Shade
  184.             END
  185.             ELSE DO
  186.                 pp_Light Shade    
  187.             END
  188.             pp_StartPoly
  189.           DO j=y1 to y1+(Stepy*(Nby-1)) by Stepy
  190.                 IF j=y1 then DO
  191.                     CALL MultiPoly(4,i,j)
  192.                 END
  193.                 IF k=1 then DO
  194.                     CALL LineV(i,j,Stepx,Stepy,n.j,y2)
  195.                 END
  196.                 ELSE DO
  197.                     CALL LineV(i+Dec,j+Dec,Stepx,Stepy,n.j,y2)
  198.                 END
  199.             END
  200.             IF j+Stepy<y2 then DO
  201.                 CALL MultiPoly(3,i,j+stepy)
  202.             END
  203.             ELSE DO
  204.                 CALL MultiPoly(3,i,y2)
  205.             END
  206.             pp_EndPolyS
  207.         END
  208.     END
  209. END
  210.  
  211. pp_EffectOff
  212. EXIT
  213.  
  214.     
  215. LineH: PROCEDURE
  216.     X=ARG(1)
  217.     Y=ARG(2)
  218.     X2=ARG(3)
  219.     S=ARG(3)/3
  220.     SS=ARG(4)/4
  221.     n=ARG(5)
  222.     W=ARG(6)
  223.  
  224.     IF n=0 THEN DO
  225.             pp_AddPoly X+S Y+ARG(3)/12
  226.             pp_AddPoly X+S+ARG(3)/12 Y-ARG(3)/12
  227.       pp_AddPoly X+S Y-SS
  228.       pp_AddPoly X+S+S/2 Y-SS-ARG(3)/12
  229.             pp_AddPoly X+S*2 Y-SS
  230.             pp_AddPoly X+S*2-ARG(3)/12 Y-ARG(3)/12 
  231.             pp_AddPoly X+S*2 Y+ARG(3)/12
  232.         IF X+X2<W THEN DO
  233.             pp_AddPoly X+X2 Y
  234.         END
  235.         ELSE DO
  236.             pp_AddPoly W Y
  237.         END
  238.     END
  239.     ELSE DO
  240.             pp_AddPoly X+S Y-ARG(3)/12
  241.             pp_AddPoly X+S+ARG(3)/12 Y+ARG(3)/12
  242.       pp_AddPoly X+S Y+SS
  243.       pp_AddPoly X+S+S/2 Y+SS+ARG(3)/12
  244.             pp_AddPoly X+S*2 Y+SS
  245.             pp_AddPoly X+S*2-ARG(3)/12 Y+ARG(3)/12 
  246.             pp_AddPoly X+S*2 Y-ARG(3)/12
  247.         IF X+X2<W THEN DO
  248.             pp_AddPoly X+X2 Y
  249.         END
  250.         ELSE DO
  251.             pp_AddPoly W Y
  252.         END
  253.     END 
  254.     
  255. RETURN
  256.  
  257. LineV: PROCEDURE
  258.     X=ARG(1)
  259.     Y=ARG(2)
  260.     Y2=ARG(4)
  261.     S=ARG(4)/3
  262.     SS=ARG(3)/4
  263.     n=ARG(5)
  264.     H=ARG(6)
  265.     IF n=0 THEN DO
  266.             pp_AddPoly X-ARG(4)/12 Y+S
  267.             pp_AddPoly X+ARG(4)/12 Y+S+ARG(4)/12
  268.       pp_AddPoly X+SS Y+S
  269.             pp_AddPoly X+SS+ARG(4)/12 Y+S+S/2
  270.             pp_AddPoly X+SS Y+S*2
  271.             pp_AddPoly X+ARG(4)/12 Y+S*2-ARG(4)/12
  272.             pp_AddPoly X-ARG(4)/12 Y+S*2            
  273.         IF Y+Y2<H THEN DO            
  274.             pp_AddPoly X Y+Y2
  275.         END
  276.         ELSE DO
  277.             pp_AddPoly X H
  278.         END
  279.     END
  280.     ELSE DO
  281.             pp_AddPoly X+ARG(4)/12 Y+S
  282.             pp_AddPoly X-ARG(4)/12 Y+S+ARG(4)/12
  283.       pp_AddPoly X-SS Y+S
  284.             pp_AddPoly X-SS-ARG(4)/12 Y+S+S/2
  285.       pp_AddPoly X-SS Y+S*2
  286.             pp_AddPoly X-ARG(4)/12 Y+S*2-ARG(4)/12
  287.             pp_AddPoly X+ARG(4)/12 Y+S*2                
  288.         IF Y+Y2<H THEN DO            
  289.             pp_AddPoly X Y+Y2
  290.         END
  291.         ELSE DO
  292.             pp_AddPoly X H
  293.         END
  294.     END 
  295.     
  296. RETURN
  297.  
  298. LineH1: PROCEDURE
  299.     X=ARG(1)
  300.     Y=ARG(2)
  301.     X2=ARG(3)
  302.     S=ARG(3)/3
  303.     SS=ARG(4)/4
  304.     n=ARG(5)
  305.     W=ARG(6)
  306.  
  307.     IF n=0 THEN DO
  308.             pp_AddPoly X+S Y
  309.             pp_AddPoly X+S Y
  310.       pp_AddPoly X+S Y-SS
  311.       pp_AddPoly X+S*2 Y-SS
  312.       pp_AddPoly X+S*2 Y
  313.       pp_AddPoly X+S*2 Y
  314.       pp_AddPoly X+S*3 Y
  315.         IF X+X2<W THEN DO
  316.             pp_AddPoly X+X2 Y
  317.         END
  318.         ELSE DO
  319.             pp_AddPoly W Y
  320.         END
  321.     END
  322.     ELSE DO
  323.             pp_AddPoly X+S Y
  324.             pp_AddPoly X+S Y
  325.       pp_AddPoly X+S Y+SS
  326.       pp_AddPoly X+S*2 Y+SS
  327.       pp_AddPoly X+S*2 Y
  328.       pp_AddPoly X+S*2 Y
  329.       pp_AddPoly X+S*3 Y
  330.         IF X+X2<W THEN DO
  331.             pp_AddPoly X+X2 Y
  332.         END
  333.         ELSE DO
  334.             pp_AddPoly W Y
  335.         END
  336.     END 
  337.     
  338. RETURN
  339.  
  340. LineV1: PROCEDURE
  341.     X=ARG(1)
  342.     Y=ARG(2)
  343.     Y2=ARG(4)
  344.     S=ARG(4)/3
  345.     SS=ARG(3)/4
  346.     n=ARG(5)
  347.     H=ARG(6)
  348.     IF n=0 THEN DO
  349.         pp_AddPoly X Y+S
  350.         pp_AddPoly X Y+S
  351.         pp_AddPoly X+SS Y+S
  352.         pp_AddPoly X+SS Y+S*2
  353.         pp_AddPoly X Y+S*2
  354.         pp_AddPoly X Y+S*2
  355.         pp_AddPoly X Y+S*3            
  356.         IF Y+Y2<H THEN DO            
  357.             pp_AddPoly X Y+Y2
  358.         END
  359.         ELSE DO
  360.             pp_AddPoly X H
  361.         END
  362.     END
  363.     ELSE DO
  364.         pp_AddPoly X Y+S
  365.         pp_AddPoly X Y+S
  366.         pp_AddPoly X-SS Y+S
  367.         pp_AddPoly X-SS Y+S*2
  368.         pp_AddPoly X Y+S*2
  369.         pp_AddPoly X Y+S*2
  370.         pp_AddPoly X Y+S*3                    
  371.         IF Y+Y2<H THEN DO            
  372.             pp_AddPoly X Y+Y2
  373.         END
  374.         ELSE DO
  375.             pp_AddPoly X H
  376.         END
  377.     END 
  378.     
  379. RETURN
  380.  
  381.  
  382. SavePrefs: PROCEDURE
  383.     Prefname='PerfectPaint:Prefs/Rexx_Prefs/'||ARG(1)
  384.     if EXISTS(Prefname) THEN DO
  385.         ADDRESS COMMAND
  386.         'delete >nil: '||Prefname
  387.     END
  388.     IF OPEN('pfile',PrefName,'W') THEN DO
  389.     do i=2 to ARG()
  390.         CALL WRITELN('pfile',ARG(i))
  391.     end
  392.     CALL CLOSE('pfile')
  393. RETURN
  394.  
  395. MultiPoly: PROCEDURE
  396.     DO i=1 to ARG(1)
  397.         pp_AddPoly ARG(2) ARG(3)
  398.     END 
  399. RETURN
  400.  
  401.  
  402.